/*
 * File:   addListDialog.cpp
 * Author: Nicolas Proust & Pierre-Antoine Jahan
 *
 * Created on 29 janvier 2013, 15:18
 */

#include "addListDialog.h"
#include "accueil.h"
#include "modele/ListOfTask.h"
using namespace std;

/*Popup appelée en cas d'ajout d'une nouvelle liste*/
addListDialog::addListDialog(accueil* parent, QDate date, User utilisateur){
    widget.setupUi(this);
    parent_=parent;
    utilisateur_=utilisateur;
    
    /*Initialisation des champs de la popup*/
    widget.comboBox->addItem("");
    std::list<ListOfTask*> templateListTask = utilisateur_.GetListOfTasksTemplates();
    std::list<ListOfTask*>::iterator it2 = templateListTask.begin();
    std::list<ListOfTask*>::const_iterator itEnd2 = templateListTask.end();
    for(;it2!=itEnd2;++it2) {
        ListOfTask* gr = *it2;
        widget.comboBox->addItem(QString(gr->getName().c_str()));
    }
    
    widget.addListBtn->setDisabled(true);
    widget.calendarList->setSelectedDate(date);
    /***************************************/
    
    /*Connexion des widgets*/
    QObject::connect(widget.addListBtn, SIGNAL(clicked()), this, SLOT(addListListener()));
    QObject::connect(widget.listName, SIGNAL(textChanged(QString)), this, SLOT(buttonValidListener()));
    /***********************/
}

/*Popup appelée en cas d'ajout d'une liste*/
addListDialog::addListDialog(accueil* parent, User utilisateur, string temp){
    widget.setupUi(this);
    parent_=parent;
    utilisateur_=utilisateur;
    
    /*Initialisation des champs de la popup*/
    widget.comboBox->addItem("");
    std::list<ListOfTask*> templateListTask = utilisateur_.GetListOfTasksTemplates();
    std::list<ListOfTask*>::iterator it2 = templateListTask.begin();
    std::list<ListOfTask*>::const_iterator itEnd2 = templateListTask.end();
    for(;it2!=itEnd2;++it2) {
        ListOfTask* gr = *it2;
        widget.comboBox->addItem(QString(gr->getName().c_str()));
    }
    
    int index = widget.comboBox->findText(QString(temp.c_str()));
    widget.comboBox->setCurrentIndex(index);
    /********************************************/
    
    /*Connexion du widget*/
    QObject::connect(widget.addListBtn, SIGNAL(clicked()), this, SLOT(addListListener()));
    /**********************/
}

/*Popup appelée en cas de modification d'une liste*/
addListDialog::addListDialog(accueil* parent, ListOfTask *list, User utilisateur){
    widget.setupUi(this);
    parent_=parent;
    list_=list;
    utilisateur_=utilisateur;
    
    /*Initialisation des champs de la popup*/
    string nomList = list_->getName();
    widget.listName->setText(QString(nomList.c_str()));
    
    Date tmpDate = list_->getDate();
    QDate date(tmpDate.getYear(),tmpDate.getMonth(),tmpDate.getDay());
    widget.calendarList->setSelectedDate(date);
    
    std::list<ListOfTask*> templateListTask = utilisateur_.GetListOfTasksTemplates();
    std::list<ListOfTask*>::iterator it2 = templateListTask.begin();
    std::list<ListOfTask*>::const_iterator itEnd2 = templateListTask.end();
    for(;it2!=itEnd2;++it2) {
        ListOfTask* gr = *it2;
        widget.comboBox->addItem(QString(gr->getName().c_str()));
    }
    
    widget.comboBox->setDisabled(true);
    /*************************************/
    
    /*Connexion du widget*/
    QObject::connect(widget.addListBtn, SIGNAL(clicked()), this, SLOT(modifyListListener()));
    /*********************/
}

addListDialog::~addListDialog() {
    //parent_.getWidget().setEnabled(true);
}

/*Methode a l'ecoute des appuis sur le bouton Valider*/
void addListDialog::addListListener() {
    
    /*Initialisation des attributs de l'objet liste par la valeur des champs*/
    QDate date = widget.calendarList->selectedDate();
    
    Date tmpDate = Date(date.day(),date.month(),date.year());
    
    ListOfTask* list = NULL;
    string nomTemplate = widget.comboBox->currentText().toStdString();
    
    std::list<ListOfTask*> listListTask = utilisateur_.GetListOfTasksTemplates();     
    std::list<ListOfTask*>::iterator it = listListTask.begin();
    std::list<ListOfTask*>::const_iterator itEnd = listListTask.end();
    for(;it!=itEnd;++it) {
        ListOfTask* gr = *it;
        if(gr->getName()==nomTemplate) {
            list = gr;
            break;
        }
    }  
    
    parent_->addList(widget.listName->text().toStdString(),tmpDate, list);
    /**********************************************/
    
    accept(); //fermeture de la popup

}

/*Listener lancé a la validation de la modification d'une liste*/
void addListDialog::modifyListListener() {
    
    /*Modification des attributs de l'objet liste par la valeur des champs*/
    QDate date = widget.calendarList->selectedDate();
    
    Date tmpDate = Date(date.day(),date.month(),date.year());

    list_->setName(widget.listName->text().toStdString());
    list_->setDate(tmpDate);
    parent_->modifyList(widget.listName->text().toStdString(),tmpDate);
    /********************************************************************/
    accept();
}

/*Methode a l'ecoute des changements effectués dans le champ LineEdit
 *  pour éviter de pouvoir valider avec un nom de liste vide*/
void addListDialog::buttonValidListener(){
    widget.addListBtn->setDisabled(false);
}